package java_thinking.unit_11._11_12;

import java_thinking.TypeInfo.pets.Pet;
import java_thinking.TypeInfo.pets.Pets;

import java.util.*;

/**
 * @Description :   Collection 与 Iterator
 *                  使用接口描述的一个理由是它可以使我们能够创建更通用的代码。
 *                  用迭代器而不是Collection来表示容器之间的共性。
 *                  但是Java中将这两种方法绑定到了一起，实现Collection就意味着需要提供iterator()方法
 * @author: cww
 * @DateTime: 2019-03-18 23:16
 */

public class InterfaceVsIterator {
    public static void display(Iterator<Pet> it){
        while (it.hasNext()){
            Pet p = it.next();
            System.out.print(p.id()+":"+p+" ");
        }
        System.out.println();
    }

    /**
     * 相对Iterator更方便些，因为因为它是Iterable类型，可以用foreach.
     * @param it
     */
    public static void display(Collection<Pet> it){
        for (Pet pet:it){
            System.out.print(pet.id()+":"+pet+" ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        List<Pet> petList = Pets.arrayList(8);
        Set<Pet> petSet = new HashSet<>(petList);
        Map<String,Pet> petMap = new HashMap<>();
        String[] names = ("Ralph,Eric,Robin,Lacey,Britney,Sam,Spot,Fluffy").split(",");
        for (int i =0;i<names.length;i++){
            petMap.put(names[i],petList.get(i));
        }
        display(petList);
        display(petSet);
        display(petList.iterator());
        display(petSet.iterator());
        System.out.println(petMap);
        System.out.println(petMap.keySet());
        display(petMap.values());
        display(petMap.values().iterator());
    }
}
